// 
// ImageResourceItem.cs
//  
// Author:
//       Tomas Vondracek <tomas.vondracek@gmail.com>
// 
// Copyright (c) 2010 Tomas Vondracek
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Drawing;
using System.IO;

namespace Common.Resources.Items
{
	internal class ImageResourceItem : ResourceItem
	{
		protected string path;
		private Image img;

		public ImageResourceItem (string id, string stringId, string path)
			: base(id, stringId)
		{
			this.path = path;
		}
		
		public Image GetImage ()
		{
			if (this.img == null)
				try
				{
					this.CheckPath();
					img = new Bitmap (this.path);
				} 
				catch (Exception ex) 
				{
					Logging.Logger.AddException (ex);
				}
			return this.img;
		}
		
		protected void CheckPath ()
		{
			var rooted = Path.IsPathRooted (this.path);
			// we can't be sure which separator is used
			this.path = this.path.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar);
			if (!rooted)
				this.path = Path.Combine (System.Windows.Forms.Application.StartupPath, this.path);
			
			if (! File.Exists(this.path))
				throw new FileNotFoundException("Image file was not found!", this.path);
			
		}
		
		#region implemented abstract members of Common.Resources.Items.ResourceItem
		public override void Dispose ()
		{
			if (this.img != null)
				this.img.Dispose();
		}
		
		#endregion
		
	}
}

